import sys
import os
import glob
import json
import re

# dir = r'C:\Files\Project\Node.js\electron_vue'
# read = True


settings = {
    # 需要解析的目录
    "dir": "/",
    # 是否读取文件内容
    "read": False,
    # 是否仅获取文件名
    "filename_only": True,
    # 需要获取的文件类型（正则）
    "ext": ".*",
}


# 用于递归获取文件内容
def get_file(option):
    # 将路径转为绝对路径
    dir = option["dir"]
    ext = option["ext"]
    read = option["read"]
    filename_only = option["filename_only"]
    rootDirLen = option["rootDirLen"]

    content = {} if read else []

    # def setDic(key_tree, val):
    #     print(key_tree, val)

    # 先获取所有文件以及文件夹
    dir_list = glob.glob(os.path.join(dir, "*"))
    for path in dir_list:
        # 通过os模块判断路径是否是文件夹
        if os.path.isdir(path):
            # print(path, '是文件夹')
            if read:
                current_dir = path[rootDirLen + 1 :].split("\\")[0]
                # 当前文件夹名， 当前文件夹名称长度
                # setDic(current_dir, len(current_dir))
                # print(option)
                option["dir"] = path
                option["rootDirLen"] = len(option["dir"])
                content[current_dir] = get_file(option)
        else:
            # 分开文件名与文件后缀
            filename = (
                os.path.splitext(os.path.basename(path))[0]
                if filename_only
                else os.path.basename(path)
            )

            # 判断文件是否是指定的后缀
            if re.search(rf"{ext}", path):
                # 读取文件内容

                # 是否读取文件内容
                if read:
                    with open(path, "r", encoding="utf-8") as data:
                        text = data.read()
                        try:
                            text = json.loads(text)
                        except:
                            pass
                        content[filename] = {
                            "data": text,
                            "stat": {
                                "size": os.path.getsize(path),
                                "ctime": os.path.getctime(path),
                                "mtime": os.path.getmtime(path),
                                "atime": os.path.getatime(path),
                            },
                            "path": path
                        }

                else:
                    content.append(filename)

    return content


def get_json(option):
    option["dir"] = os.path.realpath(option["dir"])
    option["rootDirLen"] = len(option["dir"])
    return json.dumps(get_file(option))


if len(sys.argv) < 2:
    print("未传入参数！")
else:
    param = json.loads(sys.argv[1])
    for k in param:
        settings[k] = param[k]

    settings["dir"] = os.path.realpath(settings["dir"])
    settings["rootDirLen"] = len(settings["dir"])
    obj = get_file(settings)

    print(json.dumps(obj))


# get_file(dir)


# print(json.dumps(content))
